# def 函数名（参数1, 参数2,...）:
#    函数体
# return 返回值


def greet(name, message):
    print(f'Hello', name, message)

# 参数传递方式
## 按照顺序
result = greet("user1", "I am NPC")
print(result)


## 关键字传递
greet(message="I am CPN", name="user2")

## 默认参数
### 默认值必须放在最后面

def greet(name, message="default message"):
      
    return  f'Hello, {name}, {message}'
result = greet("user3")
print(result) 




## 返回值，传递函数执行结果, 没有定义时：默认为none
### 定义返回值之后，函数执行结果可以被再引用

def divide(a,b):
    q = a * b
    r = a + b
    return a, b

result = divide(5,3)
print(result)

q, r = divide(5,3)
print(f"q={q}, r={r}")


## 嵌套函数, 内部函数能访问外层函数的变量

def outer(text):
    def inner():
        print(f"{text} in inner")
    inner()
    print(f"{text} in outer")

outer("wuhu")

## 递归函数
### demo：斐波那契数列演示
### 1，1，2，3，5，8，13，21，34，55，89，144

def fib(n): # 此处定义的 n 其实是元素的索引位
    seq = [1,1]
    while n > len(seq):
        seq.append(seq[-1]+seq[-2])
    return seq
        
print(fib(6))

## 匿名函数
### lamda 表达式
